#ifndef __VILLAGE_HPP__
#define __VILLAGE_HPP__

#include <iostream>
#include <sstream>
#include <string>
#include <functional>

using namespace std;

class Village
{
private:
    /* data */
    int _id;
    double _x;
    double _y;

public:
    int get_id() const;
    double get_x() const;
    double get_y() const;
    void set_x(double x);
    void set_y(double y);

    Village(/* args */);
    Village(int id, double x, double y);
    ~Village();

    friend std::ostream & operator << (std::ostream &os, Village &t);
    bool operator==(const Village& v) const
    {
        return (this->_id == v.get_id());
    }
};

class VillageHash
{
    public:
    size_t operator()(const Village& v) const
    {
        return v.get_id();
    }
};


// struct VillageEdge
// {
//     int _id1;
//     int _id2;
//     double weight;

//     bool operator==(const VillageEdge& t) const
//     {
//         return (this->weight == t.weight);
//     }
// };

// class VillageEdgeHash
// {
//     public:
//     size_t operator()(const VillageEdge& v) const
//     {
//         std::stringstream ostr;
//         ostr << v._id1 << "," << v._id2;

//         std::hash<std::string> h;
//         size_t n = h(ostr.str());

//         return n;
//     }
// };

#endif /* __VILLAGE_HPP__ */